package com.itheima.cases_demo.math_test;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Test2 {
    public static void main(String[] args) {
        // 测试 BigDecimal
        BigDecimal doubleVale = new BigDecimal(1.3424);
        System.out.println(doubleVale); // 1.342400000000000037658764995285309851169586181640625

        BigDecimal intValue = new BigDecimal(13);
        System.out.println(intValue); // 13

        BigDecimal strValue = new BigDecimal("1.3424");
        System.out.println(strValue); // 1.3424

        /**
         * 可以看到在创建浮点数时，字符串参数的构造器没有出现精度丢失
         * 在需要精确计算时一定使用字符串构造器
         */

        // setScale方法设置精度
        BigDecimal fixDoubleValue = doubleVale.setScale(2, RoundingMode.HALF_DOWN);
        System.out.println(fixDoubleValue); // 1.34

        // 加法运算
        BigDecimal addResult = intValue.add(fixDoubleValue);
        System.out.println(addResult); // 14.34

        // 减法运算
        BigDecimal subtractResult = addResult.subtract(strValue);
        System.out.println(subtractResult); // 12.9976

        // 乘法运算
        BigDecimal multiplyResult = subtractResult.multiply(fixDoubleValue);
        System.out.println(multiplyResult); // 17.416784

        // 除法运算
        // BigDecimal divideResult = addResult.divide(multiplyResult); // 报错，需要指定精度
        BigDecimal divideResult = addResult.divide(multiplyResult, 4, RoundingMode.HALF_DOWN);
        System.out.println(divideResult); // 0.8233


        // 比较大小 0表示相等  -1表示小于  1表示大于
        BigDecimal newValue = new BigDecimal("14.34");
        int compareResult = newValue.compareTo(addResult);
        System.out.println(compareResult); // 0

    }
}
